package com.company;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

//提供服务的接口
public interface Service
{
    public String sellCar(String carName);
}

//实现服务的类
//一个类也可以继承自一个接口
class ServiceImpl implements Service
{
    public String sellCar(String carName)
    {
        return carName+" is ready!";
    }
}

//实现了InvocationHandler接口 它包含在反射包中
class MyInvocationHandler implements InvocationHandler
{
    //object 是所有Java类的祖先
    private Object target;

    //在构造函数中初始化target对象
    MyInvocationHandler(Object target)
    {
        this.target=target;
    }

    //通过invoke方法 可以调用target类中的方法
    public Object invoke(Object o,Method method,Object[] args) throws Throwable
    {
        System.out.println("Call:"+method.getName());
        //通过method的invoke方法调用target类中的方法
        //args是参数 是从invoke方法的参数中输入
        Object result=method.invoke(target,args);

        //返回执行结果
        return result;
    }
}

